zamykani promennych ve vlaknech

Otázka od: abiturient@quick.cz

8. 7. 2004 7:16

ahoj delphisti,

zacinam pronikat do "vlaknoveho programovani" a narazil jsem na tenhle problem.

V dokumentaci jsem se docetl, ze je nutne promenne sdilene mezi vlakny
synchronizovat. Jedna z moznosti je zamykani kritickych sekci. Jedna z moznosti
zamykani je pouziti objektu TThreadList. A volani funkce LockList a pak
UnlockList s tim, ze se omezi pristup k objektum v listu, ktery vrati funkce
LockList. Pokud objekt (promenna) nebude v seznamu listu, ale bude v casti kodu
mezi volanimi LockList a UnLockList a jine vlakno se pokusi pristoupit k tomuto
objektu (promenne), bude tato promenna "chranena" pred pristupem jineho vlakna,
nez to prvni dokonci kritickou sekci a opusti ji (volanim UnLockList) ??

Nejak jsem nenasel vyklad toho co se vlastne deje "za oponou" pri volani
zamykaci a odemykaci funkce...

Moc prosim,
vedel by nekdo poradit ??

diky

nonsense


Odpovedá: Ludvik Vlcek

8. 7. 2004 7:39

abiturient@quick.cz napsal(a):
> ahoj delphisti,
>
> zacinam pronikat do "vlaknoveho programovani" a narazil jsem na tenhle
problem.
>
> V dokumentaci jsem se docetl, ze je nutne promenne sdilene mezi vlakny
synchronizovat.

Jedna z moznosti je zamykani kritickych sekci. Jedna z moznosti zamykani
je pouziti objektu TThreadList.
A volani funkce LockList a pak UnlockList s tim, ze se omezi pristup k
objektum v listu, ktery vrati funkce LockList.
Pokud objekt (promenna) nebude v seznamu listu, ale bude v casti kodu
mezi volanimi LockList a UnLockList a
jine vlakno se pokusi pristoupit k tomuto objektu (promenne), bude tato
promenna "chranena" pred pristupem
jineho vlakna, nez to prvni dokonci kritickou sekci a opusti ji (volanim
UnLockList) ??
>
> Nejak jsem nenasel vyklad toho co se vlastne deje "za oponou" pri volani
zamykaci a odemykaci funkce...
>
Podivej se do zdrojaku. Tusim, ze to je v:
....\Source\Rtl\Common\Cklasses.pas
Tam zjistis, ze takhle funkce vytvari promenou typu TRTLCriricalSection.
A k tomu uz je docela dost dokumentu, helpu celkem srozumitelne vysvetleno.

> Moc prosim,
> vedel by nekdo poradit ??
>
> diky
>
rado se stalo
L.V.
jezevec

Odpovedá: abiturient@quick.cz

8. 7. 2004 7:54

> > Nejak jsem nenasel vyklad toho co se vlastne deje "za oponou" pri
> volani zamykaci a odemykaci funkce...
> >
> Podivej se do zdrojaku. Tusim, ze to je v:
> ....\Source\Rtl\Common\Cklasses.pas
> Tam zjistis, ze takhle funkce vytvari promenou typu
> TRTLCriricalSection.
> A k tomu uz je docela dost dokumentu, helpu celkem srozumitelne
> vysvetleno.

Asi jsem natvrdlej, ale skoro nic...  
Navic, nasel jsem jen popis (taky nic moc) pro objekt TCriticalSection

jeste jednou prosim o nasmerovani ....

diky
nonsense


Odpovedá: Daniel Rott

8. 7. 2004 8:05

> Asi jsem natvrdlej, ale skoro nic...  
> Navic, nasel jsem jen popis (taky nic moc) pro objekt
> TCriticalSection
> jeste jednou prosim o nasmerovani ....

Lepsi je hledat primo u zdroje, jukni se do Platform SDK,
pokud ji nemas instalovanou (coz se divim), tak je i on-line:
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dllproc/base/critical_section_objects.asp

Daniel
---------------------------------------------------------------
Scanning complete: NO intelligent life form in range.



Odpovedá: abiturient@quick.cz

8. 7. 2004 8:34

> > >
> > Podivej se do zdrojaku. Tusim, ze to je v:
> > ....\Source\Rtl\Common\Cklasses.pas
> > Tam zjistis, ze takhle funkce vytvari promenou typu
> > TRTLCriricalSection.
> > A k tomu uz je docela dost dokumentu, helpu celkem srozumitelne
> > vysvetleno.
>
> Asi jsem natvrdlej, ale skoro nic...  
> Navic, nasel jsem jen popis (taky nic moc) pro objekt TCriticalSection
>
Tak jeste jednou ....
Datova strucktura TRTLCriticalSection (packed record) slouzi pro funkce
vytvarejici, rusici a pouzivajici kriticke sekve. To RTL "jen obaluje" volani
funkci z dll knihoven systemu, konkretne kernelu. TCriticalSection zase
"zabaluje" tyhle funce do objektu...

Viz zdrojove kody ....

Staci ???

godd luck

L.V.
jezevec